/* **************************************************************************
*                                 ISBN                                      *                                                                        *
*   Este prgrama verifica si el ISBN es correcto                            *
*                                                                           *
*  Autor: Sebasstian Galindo Alvarado                                       *
*  Version : 1.0.0.0                                                        *
*  Fecha: 5 de julio 2012                                                                         *
*****************************************************************************/
#include <iostream>
#include <cstdlib>
#include <iomanip>
/* **********************Definicion de constantes**********/
#define W_ISBN          20
#define Zero            0
#define Set             1
#define Mask            0x0F
#define Div             10
#define Type_of_Book    11
using namespace std;
/* ********** Main ****************************************/
int main()
{
/* ****************Declaracion de variables ************************ */
    char ISBN[W_ISBN],ISBN_Temp[W_ISBN];
    unsigned char Sum1ISBN[W_ISBN],Sum2ISBN[W_ISBN],Cont_Char,Cont_Char_Use;
   /* *****************************************************************/
    cout << "Introdusca ISBN " << endl; /* Pide los datos al usuario*/
    cin.getline(ISBN,W_ISBN);
    /*************************** Elemina los ' ' y los '-' de la cadena ***************************/
    /**/    for(Cont_Char_Use = 0, Cont_Char = 0; Cont_Char_Use < sizeof(ISBN) ; Cont_Char_Use ++)                                                   /**/
    /**/        {                                                                                                                                    /**/
    /**/            if((ISBN[Cont_Char_Use] >= '0' && ISBN[Cont_Char_Use] <= '9') || (ISBN[Cont_Char_Use] == 'x' || ISBN[Cont_Char_Use] == 'X') )    /**/
    /**/                {                                                                                                                            /**/
    /**/                   ISBN_Temp[Cont_Char] = ISBN[Cont_Char_Use];                                                                               /**/
    /**/                   Cont_Char ++ ;                                                                                                            /**/
    /**/                }                                                                                                                            /**/
    /**/                                                                                                                                             /**/
    /**/        }                                                                                                                                    /**/
    /**/    for (Cont_Char = 0 ; Cont_Char < sizeof(ISBN); Cont_Char++ )                                                                             /**/
    /**/        {                                                                                                                                    /**/
    /**/            ISBN[Cont_Char] = ISBN_Temp[Cont_Char];                                                                                          /**/
    /**/       }                                                                                                                                     /**/
     /***********************************************************************************************/
        if( ISBN[9] == 'X' || ISBN[9] == 'x'   )
               {
                    ISBN[9] = 10;         /*En caso de X agraga un 10 al ultimo elemento recibido */
               }
        Sum1ISBN[Zero]      = Sum2ISBN[Zero] =(Mask & ISBN[Zero]);
        /**************************Calcula las Sumas para el ISBN***********************************/
        for (Cont_Char = 0 ; Cont_Char < Div  ; Cont_Char++)
            {
                    if(ISBN[Cont_Char] >= '0' && ISBN[Cont_Char] <= '9')
                        {
                            Sum1ISBN[Cont_Char+1] =  Sum1ISBN[Cont_Char] + (Mask & ISBN[Cont_Char+1]);
                            Sum2ISBN[Cont_Char+1] =  Sum2ISBN[Cont_Char] + Sum1ISBN[Cont_Char+1];
                        }
            }
       /*************************************************************************************************/


                if((Sum2ISBN[9]% Type_of_Book) == Zero)
                    {
                        cout << "ISBN Correcto " << endl;
                        for(unsigned char i = 0 ; i<=9 ; i++ )
                            {
                                    cout << ISBN_Temp[i];
                                    if( (i%3) == 0 && i < 8)
                                        {
                                            cout << "-";
                                        }
                            }
                    }
                else
                    {
                        cout << "Error!!!!! ISBN No Reconocido " << endl;
                    }





    return 0;
}

